//****************************************Copyright (c)***********************************//
//原子哥在线教学平台：www.yuanzige.com
//技术支持：www.openedv.com
//淘宝店铺：http://openedv.taobao.com 
//关注微信公众平台微信号："正点原子"，免费获取ZYNQ & FPGA & STM32 & LINUX资料。
//版权所有，盗版必究。
//Copyright(C) 正点原子 2018-2028
//All rights reserved	                               
//----------------------------------------------------------------------------------------
// File name:           uart_top
// Last modified Date:  2022/7/11 14:38:36
// Last Version:        V1.0
// Descriptions:        uart_demo串口顶层模块
//----------------------------------------------------------------------------------------
// Created by:          正点原子
// Created date:        2022/7/11 11:24:36
// Version:             V1.0
// Descriptions:        The original version
//
//----------------------------------------------------------------------------------------
//****************************************************************************************//

 module uart_top(
 	input				sys_clk,            //系统时钟
 	input				sys_rst_n,          //复位，低电平有效
 	input				uart_rx,            //接收端
 	                                     
 	output				uart_tx             //发送端
 );
 
 //wire define              
 wire				rx_done;		        //接收完成标志
 wire	[7 :0]		rxd_data;               //接收到的数据                                           
 wire				fsm_done;               //状态机完成信号                                      
 wire	[4 :0]		rom_point;              //rom寻址
 wire				send_en;                //发送到发送端
 wire    [7:0]       txd_data;               //发送端的数据
 
 //*****************************************************
 //**                    main code
 //*****************************************************
 
 //例化接收模块
 uart_rx u_uart_rx(
 	.sys_clk    (sys_clk),
 	.sys_rst_n  (sys_rst_n),
 	.uart_rx    (uart_rx),  
                    
 	.rx_done    (rx_done),                      
 	.rxd_data   (rxd_data)                     
 );
 
 //例化状态机模块
 state_data u_state_data(
 	.sys_clk    (sys_clk),
 	.sys_rst_n  (sys_rst_n),
     .rxd_data   (rxd_data),                    
 	.rx_done    (rx_done),                      
         
 	.fsm_done   (fsm_done)                     
 );
 
 //例化rom模块	
 read_rom u_read_rom(
 	.sys_clk    (sys_clk),
 	.sys_rst_n  (sys_rst_n),
 	.start_read (fsm_done),                  
     
 	.rom_point  (rom_point),                  
 	.send_en    (send_en)                     
 );
 
 //例化rom IP
 blk_mem_gen_0 u_blk_mem_gen_0 (
   .clka     (sys_clk),                           
   .addra    (rom_point),                        
   .douta    (txd_data)                          
 );	
 
 //例化发送模块
 uart_tx u_uart_tx(
 	.sys_clk    (sys_clk),
 	.sys_rst_n  (sys_rst_n),
 	.txd_data   (txd_data),                    
 	.tx_done    (send_en),                     
 	
 	.uart_tx    (uart_tx)                       
 );
 	
 endmodule